import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Pages from 'vite-plugin-pages'
import Components from 'unplugin-vue-components/vite'
import AutoImport from 'unplugin-auto-import/vite'
import { VantResolver } from '@vant/auto-import-resolver'
import UnoCSS from 'unocss/vite'
import { presetUno, presetAttributify, presetIcons } from 'unocss'
import path from 'path'
import postcssMobileForever from 'postcss-mobile-forever'
import Stylelint from 'vite-plugin-stylelint'
import compression from 'vite-plugin-compression'
import { visualizer } from 'rollup-plugin-visualizer'

const useGzip = process.env.VITE_USE_GZIP === 'true'

// 设置移动端适配组件
const rootContainingBlockSelectorList = [
  '.van-tabbar',
  '.van-popup',
  '.van-popup--bottom',
  '.van-popup--top',
  '.van-popup--left',
  '.van-popup--right'
  // 在这里添加你的选择器
]

// import pxToViewport from 'postcss-px-to-viewport'
// https://vitejs.dev/config/
export default defineConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    }
  },
  plugins: [
    vue(),
    // 自动生成路由
    Pages({
      dirs: 'src/pages',
      extensions: ['vue'], // 文件扩展名
      routeBlockLang: 'json5' // 路由块语言
    }),
    // 自动导入组件
    Components({
      resolvers: [VantResolver()],
      dts: 'src/types/components.d.ts'
    }),
    // 自动导入 API
    AutoImport({
      imports: ['vue', 'vue-router', 'pinia'],
      dirs: ['src/utils', 'src/api', 'src/stores'],
      resolvers: [VantResolver()],
      dts: 'src/types/auto-imports.d.ts'
    }),
    // UnoCSS
    UnoCSS({
      presets: [presetUno(), presetAttributify(), presetIcons()]
    }),
    // StyleLint 插件，开发时自动检查和修复
    Stylelint({
      fix: true, // 自动修复
      cache: false, // 不缓存，确保每次都检查
      lintOnStart: true, // 启动时检查
      include: ['src/**/*.{css,scss,vue}'] // 需要检查的文件
    }),
    // 👉 Gzip 压缩生成 .gz 文件
    useGzip &&
      compression({
        algorithm: 'gzip', // 支持 gzip / brotliCompress
        ext: '.gz',
        threshold: 10240, // 超过 10kb 才压缩
        deleteOriginFile: false // 是否删除原始文件
      }),
    // 👉 打包分析报告
    visualizer({
      open: true, // 打包后自动打开报告页面
      gzipSize: true,
      brotliSize: true
    })
  ].filter(Boolean),
  css: {
    postcss: {
      plugins: [
        postcssMobileForever({
          appSelector: '#app',
          viewportWidth: 375, // 设计稿宽度
          maxDisplayWidth: 625, // 最大展示宽度
          border: true, // 开启 1px 处理
          rootContainingBlockSelectorList
        })
      ]
    }
  },
  server: {
    host: '0.0.0.0',
    port: 3000,
    // 开发服务器代理配置
    proxy: {
      // 以 /api 开头的请求会被代理到目标服务器
      '/api': {
        target: 'https://bitharp.org/', // 目标服务器地址
        changeOrigin: true // 改变请求头中的 Origin
        // rewrite: (path) => path.replace(/^\/api/, ''), // 可选：重写路径，去掉 /api 前缀
      }
      // 可以添加多个代理配置
      // '/upload': {
      //   target: 'http://localhost:8080',
      //   changeOrigin: true,
      //   // 不重写路径
      // },
      // 示例：代理到第三方服务
      // '/third-party': {
      //   target: 'https://third-party-api.example.com',
      //   changeOrigin: true,
      //   rewrite: (path) => path.replace(/^\/third-party/, ''),
      //   // 可以添加自定义请求头
      //   headers: {
      //     'X-Custom-Header': 'value',
      //   },
      // },
    }
  },
  build: {
    outDir: 'dist',
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    }
  }
})
